package com.example.vietvoicecmdsimple;

import com.example.vietvoicecmdsimple.VParameter.FormatType;

public class VoiceAnalyse {
	public static enum ACTIONTYPE {
		MESSAGE, CALL, ALARM, WAKEUP, ASKTIME, OPENAPP, SEARCH
	}
	public static final String[] SendMessage = {
			"TIN NHẮN", "NHẮN TIN"
	};
	public static final String[] MakeCall = {
			"GỌI ĐIỆN", "CUỘC GỌI"
	};
	public static final String[] SetAlarm = {
			"HẸN GIỜ", "BÁO THỨC"
	};
	public static final String[] WAKEUP = {
			"ĐÁNH THỨC", "NHẮC NHỞ"
	};
	public static final String[] AskTime = {
			"MẤY GIỜ", "THỜI GIAN"
	};
	public static final String[] OpenApp = {
			"MỞ", "ỨNG DỤNG", "CHƯƠNG TRÌNH"
	};
	public static final String[] Search = {
			"TÌM KIẾM", "TÌM THÔNG TIN"
	};
	
	public static VObject Analyse(String input){
		VObject vObj = new VObject();
		//Message
		for(int i = 0; i < SendMessage.length; i++){
			if (input.toUpperCase().contains(SendMessage[i])){
				System.out.println(input);
				vObj.Action = ACTIONTYPE.MESSAGE;
				
				String contactName = "", bodyMess = "";
				int sendToIndex, bodyIndex;
				sendToIndex = input.toUpperCase().indexOf("ĐẾN");
				bodyIndex = input.toUpperCase().indexOf("NỘI DUNG");
				if (sendToIndex > 0){
					if (sendToIndex < bodyIndex){
						contactName = input.substring(sendToIndex+"ĐẾN".length(), bodyIndex - 1);
					}
					else {
						contactName = input.substring(sendToIndex+"ĐẾN".length());
					}
				}
				if (bodyIndex > 0){
					if (bodyIndex < sendToIndex){
						bodyMess = input.substring(bodyIndex+"NỘI DUNG".length(), sendToIndex - 1);
					}
					else {
						bodyMess = input.substring(bodyIndex+"NỘI DUNG".length());
					}
				}
				if (contactName.isEmpty()){
					vObj.Parameters[0].IsNeedAsk = true;
					vObj.Parameters[0].Question = "Cho biết số điện thoại hoặc tên";
					vObj.Parameters[0].Format = FormatType.CONTACT;
				}
				else{
					vObj.Parameters[0].Value = contactName;
					vObj.Parameters[0].Format = FormatType.CONTACT;
					if (!vObj.Parameters[0].Validate()){
						vObj.Parameters[0].IsNeedAsk = true;
						vObj.Parameters[0].Question = "Cho biết số điện thoại hoặc tên";
					}
				}
				if (bodyMess.isEmpty()){
					vObj.Parameters[1].IsNeedAsk = true;
					vObj.Parameters[1].Question = "Nội dung tin nhắn là gì?";
					vObj.Parameters[1].Format = FormatType.TEXT;
				}
				else{
					vObj.Parameters[1].Value = bodyMess;
					vObj.Parameters[1].Format = FormatType.TEXT;
					if (!vObj.Parameters[1].Validate()){
						vObj.Parameters[1].IsNeedAsk = true;
						vObj.Parameters[1].Question = "Nội dung tin nhắn là gì?";
					}
				}
			}
		}
		
		//Call
		for(int i = 0; i < MakeCall.length; i++){
			if (input.toUpperCase().contains(MakeCall[i])){
				System.out.println(input);
				vObj.Action = ACTIONTYPE.CALL;
				
				String contactName = "";
				int callToIndex = input.toUpperCase().indexOf("ĐẾN");
				if (callToIndex == -1){
					callToIndex = input.toUpperCase().indexOf(MakeCall[i]);
					if (callToIndex < input.length() - MakeCall[i].length()){
						contactName = input.substring(callToIndex + MakeCall[i].length());
					}
				}
				else{
					contactName = input.substring(callToIndex + "ĐẾN".length());
				}
				System.out.println(callToIndex);
				
				if (contactName.isEmpty()){
					vObj.Parameters[1].IsNeedAsk = true;
					vObj.Parameters[1].Question = "Cho biết số điện thoại hoặc tên";
					vObj.Parameters[1].Format = FormatType.CONTACT;
				}
				else{
					vObj.Parameters[1].Value = contactName;
					vObj.Parameters[1].Format = FormatType.CONTACT;
					if (!vObj.Parameters[1].Validate()){
						vObj.Parameters[1].IsNeedAsk = true;
						vObj.Parameters[1].Question = "Cho biết số điện thoại hoặc tên";
					}
				}
			}
		}
		
		//Set Alarm
		for(int i = 0; i < SetAlarm.length; i++){
			if (input.toUpperCase().contains(SetAlarm[i])){
				System.out.println(input);
				vObj.Action = ACTIONTYPE.ALARM;
				
				String timeStr = "";
				int timeIndex = input.toUpperCase().indexOf("LÚC");
				if (timeIndex == -1){
					timeIndex = input.toUpperCase().indexOf(SetAlarm[i]);
					if (timeIndex < input.length() - SetAlarm[i].length()){
						timeStr = input.substring(timeIndex + SetAlarm[i].length());
					}
				}
				else{
					timeStr = input.substring(timeIndex + "LÚC".length());
				}
				System.out.println(timeIndex);
				
				if (timeStr.isEmpty()){
					vObj.Parameters[1].IsNeedAsk = true;
					vObj.Parameters[1].Question = "Cho biết giờ cần báo thức";
					vObj.Parameters[1].Format = FormatType.TIME;
				}
				else{
					vObj.Parameters[1].Value = timeStr;
					vObj.Parameters[1].Format = FormatType.TIME;
					if (!vObj.Parameters[1].Validate()){
						vObj.Parameters[1].IsNeedAsk = true;
						vObj.Parameters[1].Question = "Cho biết giờ cần báo thức?";
					}
				}
			}
		}
		//Wake up
		for(int i = 0; i < WAKEUP.length; i++){
			if (input.toUpperCase().contains(WAKEUP[i])){
				System.out.println(input);
				vObj.Action = ACTIONTYPE.WAKEUP;
				
				String timeStr = "";
				int timeIndex = input.toUpperCase().indexOf("SAU");
				if (timeIndex == -1){
					timeIndex = input.toUpperCase().indexOf(WAKEUP[i]);
					if (timeIndex < input.length() - WAKEUP[i].length()){
						timeStr = input.substring(timeIndex + WAKEUP[i].length());
					}
				}
				else{
					timeStr = input.substring(timeIndex + "SAU".length());
				}
				System.out.println(timeIndex);
				
				if (timeStr.isEmpty()){
					vObj.Parameters[1].IsNeedAsk = true;
					vObj.Parameters[1].Question = "Cho biết thời gian đánh thức";
					vObj.Parameters[1].Format = FormatType.TIME;
				}
				else{
					vObj.Parameters[1].Value = timeStr;
					vObj.Parameters[1].Format = FormatType.TIME;
					if (!vObj.Parameters[1].Validate()){
						vObj.Parameters[1].IsNeedAsk = true;
						vObj.Parameters[1].Question = "Cho biết thời gian đánh thức?";
					}
				}
			}
		}
		
		//Ask Time
		for(int i = 0; i < AskTime.length; i++){
			if (input.toUpperCase().contains(AskTime[i])){
				System.out.println(input);
				vObj.Action = ACTIONTYPE.ASKTIME;
			}
		}
		
		//OpenApplication
		for(int i = 0; i < OpenApp.length; i++){
			if (input.toUpperCase().contains(OpenApp[i])){
				System.out.println(input);
				vObj.Action = ACTIONTYPE.OPENAPP;
				int appIndex = input.toUpperCase().indexOf(OpenApp[i]);
				String nameApp ="";
				if (appIndex > 0 && appIndex + OpenApp[i].length() < input.length())
				{
					nameApp = input.substring(appIndex + OpenApp[i].length());
				}
				if (nameApp.isEmpty()){
					vObj.Parameters[1].IsNeedAsk = true;
					vObj.Parameters[1].Format = FormatType.TEXT;
					vObj.Parameters[1].Question = "Bạn muốn mở ứng dụng gì?";
				}
				else
				{
					vObj.Parameters[1].Value = nameApp;
					vObj.Parameters[1].Format = FormatType.TEXT;
					if (!vObj.Parameters[1].Validate()){
						vObj.Parameters[1].IsNeedAsk = true;
						vObj.Parameters[1].Question = "Bạn muốn mở ứng dụng gì?";
					}
				}
			}
		}	
		return vObj;
	}
}
